package main

import "fmt"

/*
* Content: if语句、for 循环、跳出for循环、switch语句、九九乘法表
* --------------------------------------------------
* Go语言 if判断和for循环实战 goto使用的那些坑: https://juejin.cn/post/7069549500649439245
 */

func MyControl() {

	// if 语句
	fmt.Println("--------------------if语句--------------------")

	// 基本 if 语句
	age := 20
	if age > 18 {
		fmt.Println("你成年了")
	} else {
		fmt.Println("你写作业去吧")
	}

	// 多个判断条件 - else if
	age2 := 20
	if age2 > 35 {
		fmt.Println("人到中年")
	} else if age2 > 18 {
		fmt.Println("青年")
	} else {
		fmt.Println("少年")
	}

	// for 循环
	fmt.Println("--------------------for循环--------------------")

	// 基本 for 循环
	fmt.Println("基本 for 循环")
	for i := 0; i < 3; i++ {
		fmt.Println(i)
	}

	// 变形1: 外部传入i
	fmt.Println("变形1: 外部传入 i")
	j := 1
	for ; j < 3; j++ {
		fmt.Println(j)
	}

	// 变形2: 类似于其他语言的 while 语句
	fmt.Println("变形2: 类似于其他语言的 while 语句")
	m := 1
	for m < 3 {
		fmt.Println(m)
		m++
	}

	// 变形3: 无限循环模式
	//for {
	//	fmt.Println("无限循环")
	//}

	// for range 循环: 很常用
	fmt.Println("for range 循环: 很常用")
	cArr := []int{3, 6, 9}
	for i, v := range cArr {
		fmt.Printf("index值为:%v, value值为:%v\n", i, v)
	}

	// 跳出 for 循环
	fmt.Println("--------------------跳出for循环--------------------")
	// break: 跳出for循环
	for i := 0; i < 3; i++ {
		if i == 1 {
			break
		}
		fmt.Println(i)
	}
	fmt.Println("打印结束...")

	// continue: 跳出本轮循环
	for i := 0; i < 3; i++ {
		if i == 1 {
			continue
		}
		fmt.Println(i)
	}
	fmt.Println("打印结束...")

	// switch 语句
	fmt.Println("--------------------switch语句--------------------")

	// 普通 switch 语句
	sint := 2
	switch sint {
	case 1:
		fmt.Println(1)
	case 2, 3: // 只会执行1个, 除非使用 fallthrough 关键字
		fmt.Println(2)
	default:
		fmt.Println(9)
	}

	// 加判断的 switch 语句
	sint2 := 20
	switch { // 当在case后加判断时，switch后面不需要传入参数，否则会报错：类型不匹配。
	case sint2 < 18:
		fmt.Println("好好学习")
	case sint2 > 18 && sint2 < 35: // 只会执行1个, 除非使用 fallthrough 关键字
		fmt.Println("好好上班")
	case sint2 > 35:
		fmt.Println("希望不用继续上班了，哈哈")
	default:
		fmt.Println(age)
	}

	// 九九乘法表
	fmt.Println("--------------------九九乘法表--------------------")

	jiujiu()

}

// 九九乘法表
func jiujiu() {
	for i := 1; i <= 9; i++ {
		for j := 1; j <= i; j++ {
			fmt.Printf("%v*%v=%v  ", i, j, i*j)
		}
		println()
	}
}
